package com.lemon.boot.common.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortBuilder;

import java.util.Collection;

/**
 * @author 李猛
 * @datetime 2024/4/12 10:54
 * @description 接口对象
 */
public interface ElasticsearchService {

    /**
     * 创建索引
     *
     * @param index
     * @return
     */
    boolean createIndex(String index);

    /**
     * 新增
     *
     * @param t
     * @param <T>
     * @return
     */
    <T> boolean add(T t);

    /**
     * 删除
     *
     * @param id
     * @param clazz
     * @param <T>
     * @return
     */
    <T> boolean del(String id, Class<T> clazz);

    /**
     * 删除
     *
     * @param id
     * @param clazz
     * @param <T>
     * @return
     */
    <T> boolean del(Long id, Class<T> clazz);

    /**
     * 根据ID修改数据
     *
     * @param t
     * @param <T>
     * @return
     */
    <T> boolean edit(T t);

    /**
     * 根据ID查询数据
     *
     * @param id
     * @param clazz
     * @param <T>
     * @return
     */
    <T> T get(String id, Class<T> clazz);

    /**
     * 根据ID查询数据
     *
     * @param id
     * @param clazz
     * @param <T>
     * @return
     */
    <T> T get(Long id, Class<T> clazz);

    /**
     * 分页查询数据
     *
     * @param queryBuilder
     * @param current
     * @param size
     * @param clazz
     * @param <T>
     * @return
     */
    <T> Page<T> page(QueryBuilder queryBuilder, long current, long size, Class<T> clazz);

    /**
     * 分页查询数据-带排序
     *
     * @param queryBuilder
     * @param current
     * @param size
     * @param clazz
     * @param <T>
     * @return
     */
    <T> Page<T> page(QueryBuilder queryBuilder, SortBuilder<?> sortBuilder, long current, long size, Class<T> clazz);

    /**
     * 滚动查询数据-带排序
     *
     * @param queryBuilder
     * @param current
     * @param size
     * @param clazz
     * @param <T>
     * @return
     */
    <T> Page<T> scroll(QueryBuilder queryBuilder, SortBuilder<?> sortBuilder, long current, long size, Class<T> clazz);
}
